#!/bin/bash

# ANSI 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

function show_welcome() {
echo -e "${GREEN}====================================================${NC}"
echo -e "${GREEN}        欢迎使用 全能一键安装管理工具箱         ${NC}"
echo -e "${YELLOW}👉 QQ交流群: 648479324${NC}"
echo -e "${YELLOW}👉 作者网站: www.hanyuxin.cn${NC}"
echo -e "${GREEN}====================================================${NC}"
}

function main_menu() {
clear
show_welcome
echo -e "${GREEN}==============================${NC}"
echo -e "${GREEN}   🔗 全能一键安装管理工具箱     ${NC}"
echo -e "${GREEN}==============================${NC}"
echo -e "${YELLOW}1.${NC} 安装宝塔面板"
echo -e "${YELLOW}2.${NC} 安装1Panel面板"
echo -e "${YELLOW}3.${NC} 安装Docker"
echo -e "${YELLOW}4.${NC} 更换Linux镜像源"
echo -e "${YELLOW}5.${NC} 安装BillionMail（普通安装）"
echo -e "${YELLOW}6.${NC} 安装BillionMail（Docker安装）"
echo -e "${YELLOW}7.${NC} 安装AllinSSL（国内服务器）"
echo -e "${YELLOW}8.${NC} 安装AllinSSL（海外服务器）"
echo -e "${YELLOW}9.${NC} 安装雷池 SafeLine WAF"
echo -e "${YELLOW}10.${NC} 安装 Java"
echo -e "${YELLOW}11.${NC} 查询公网 IP 和位置信息"
echo -e "${YELLOW}12.${NC} 安装 LNMP 环境"
echo -e "${YELLOW}13.${NC} 安装 Python 环境"
echo -e "${YELLOW}14.${NC} 申请 SSL 证书"
echo -e "${YELLOW}15.${NC} 安装数据库环境"
echo -e "${YELLOW}16.${NC} 一键更新 Yum 源"
echo -e "${YELLOW}17.${NC} 安装 MCSManager（MCsm）"
echo -e "${YELLOW}18.${NC} 安装微信 Markdown 编辑器（Docker）"
echo -e "${YELLOW}19.${NC} 安装兰空图床（LanKong）"
echo -e "${YELLOW}20.${NC} 安装 Node.js 环境"
echo -e "${YELLOW}21.${NC} 安装 GameServerManager（GSM）"
echo -e "${YELLOW}22.${NC} 安装 GO 语言环境"
echo -e "${YELLOW}23.${NC} PVE 换源"
echo -e "${YELLOW}0.${NC} 退出脚本"
}

function run_script() {
main_menu

local choice

# 增强型输入判断
until false; do
    read -p $'\n请选择要执行的操作 (输入数字 0-23): ' choice

    # 检查是否为纯数字
    if ! [[ "$choice" =~ ^[0-9]+$ ]]; then
        echo -e "${RED}⚠️ 请输入数字！${NC}"
        continue
    fi

    # 检查是否在范围内
    if [ "$choice" -lt 0 ] || [ "$choice" -gt 23 ]; then
        echo -e "${RED}⚠️ 输入无效，请输入 0-23 的数字。${NC}"
        continue
    fi

    break
done

case $choice in
  1)
    echo -e "${GREEN}👉 正在安装宝塔面板...${NC}"
    url=https://download.bt.cn/install/installStable.sh
    if [ -f /usr/bin/curl ]; then
      curl -sSO $url
    else
      wget -O installStable.sh $url
    fi
    bash installStable.sh ed250616lt
    ;;
  2)
    echo -e "${GREEN}👉 正在安装1Panel面板...${NC}"
    bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"
    ;;
  3)
    echo -e "${GREEN}👉 正在安装Docker...${NC}"
    bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
    ;;
  4)
    echo -e "${GREEN}👉 正在更换Linux镜像源...${NC}"
    bash <(curl -sSL https://linuxmirrors.cn/main.sh)
    ;;
  5)
    echo -e "${GREEN}👉 正在安装 BillionMail（普通系统安装）...${NC}"
    cd /opt && git clone https://github.com/aaPanel/BillionMail || { echo -e "${RED}Git 克隆失败，请检查网络或是否已安装 Git。${NC}"; exit 1; }
    cd BillionMail && bash install.sh
    ;;
  6)
    echo -e "${GREEN}👉 正在安装 BillionMail（Docker 安装）...${NC}"
    cd /opt && git clone https://github.com/aaPanel/BillionMail || { echo -e "${RED}Git 克隆失败，请检查网络或是否已安装 Git。${NC}"; exit 1; }
    cd BillionMail && cp env_init .env
    if command -v docker-compose &> /dev/null; then
      docker-compose up -d
    elif command -v docker &> /dev/null; then
      docker compose up -d
    else
      echo -e "${RED}未找到 Docker 或 Docker Compose，请先安装 Docker 环境。${NC}"
      exit 1
    fi
    ;;
  7)
    echo -e "${GREEN}👉 正在安装 AllinSSL（国内服务器）...${NC}"
    curl -sSO http://download.allinssl.com/install_allinssl.sh && bash install_allinssl.sh allinssl
    ;;
  8)
    echo -e "${GREEN}👉 正在安装 AllinSSL（海外服务器）...${NC}"
    curl -sSO https://cnb.cool/allinssl/install.sh/-/git/raw/main/install_allinssl.sh && bash install_allinssl.sh allinssl
    ;;
  9)
    echo -e "${GREEN}👉 正在安装雷池（SafeLine）WAF...${NC}"
    bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"
    ;;
  10)
    echo -e "${GREEN}👉 正在安装 Java...${NC}"
    if ! command -v curl &> /dev/null; then
      echo -e "${RED}❌ 未安装 curl，请先安装 curl 工具。${NC}"
      exit 1
    fi
    bash -x <(curl -sSL http://shijiazhuanhg.jiaoben.mirrors.hanyuxin.cn:10710/installer.sh)
    ;;
  11)
    echo -e "${GREEN}👉 正在查询公网 IP 及位置信息...${NC}"
    bash <(curl -Ls IP.Check.Place)
    ;;
  12)
    echo -e "${GREEN}👉 正在安装 LNMP 环境...${NC}"
    if ! command -v wget &> /dev/null; then
      echo -e "${RED}❌ 未安装 wget，请先安装 wget 工具。${NC}"
      exit 1
    fi
    wget http://soft.lnmp.com/lnmp/lnmp2.0.tar.gz -O lnmp2.0.tar.gz && \
    tar zxf lnmp2.0.tar.gz && \
    cd lnmp2.0 && \
    LNMP_Auto="y" DBSelect="4" Bin="n" DB_Root_Password="hanyuxin" \
    InstallInnodb="y" PHPSelect="11" SelectMalloc="2" ./install.sh lnmp
    ;;
  13)
    echo -e "${GREEN}👉 正在安装 Python 环境...${NC}"
    echo -e "${YELLOW}💡 正在下载并运行 Python 安装脚本...${NC}"

    if ! command -v curl &> /dev/null; then
      echo -e "${RED}❌ 未安装 curl，请先安装 curl 工具。${NC}"
      exit 1
    fi

    curl -s -o installpython.sh http://shijiazhuanhg.jiaoben.mirrors.hanyuxin.cn:10710/installpython.sh
    chmod +x installpython.sh
    ./installpython.sh
    ;;
  14)
    echo -e "${GREEN}👉 正在申请 SSL 证书...${NC}"
    if ! command -v curl &> /dev/null; then
      echo -e "${RED}❌ 未安装 curl，请先安装 curl 工具。${NC}"
      exit 1
    fi
    curl -s -o ssl.sh http://shijiazhuanhg.jiaoben.mirrors.hanyuxin.cn:10710/ssl.sh && \
    chmod +x ssl.sh && \
    ./ssl.sh
    ;;
  15)
    echo -e "${GREEN}👉 正在安装数据库环境...${NC}"
    if ! command -v wget &> /dev/null; then
      echo -e "${RED}❌ 未安装 wget，请先安装 wget 工具。${NC}"
      exit 1
    fi
    wget -O shujuku.sh http://shijiazhuanhg.jiaoben.mirrors.hanyuxin.cn:10710/shujuku.sh && \
    chmod +x shujuku.sh && \
    sudo ./shujuku.sh
    ;;
  16)
    echo -e "${GREEN}👉 正在一键更新 Yum 源...${NC}"
    if ! command -v curl &> /dev/null; then
      echo -e "${RED}❌ 未安装 curl，请先安装 curl 工具。${NC}"
      exit 1
    fi
    curl -s -o change-yum-mirror.sh http://shijiazhuanhg.jiaoben.mirrors.hanyuxin.cn:10710/change-yum-mirror.sh && \
    chmod +x change-yum-mirror.sh && \
    sudo ./change-yum-mirror.sh
    ;;
  17)
    echo -e "${GREEN}👉 正在安装 MCSManager（MCsm）...${NC}"
    echo -e "${YELLOW}💡 正在通过 sudo 执行 MCSManager 一键安装脚本...${NC}"
    sudo su -c "wget -qO- https://script.mcsmanager.com/setup_cn.sh | bash"
    ;;
  18)
    echo -e "${GREEN}👉 正在安装微信 Markdown 编辑器（Docker）...${NC}"
    echo -e "${YELLOW}💡 正在运行 doocs/md Docker 容器，映射端口 8080...${NC}"

    if ! command -v docker &> /dev/null; then
      echo -e "${RED}❌ 未检测到 Docker，请先安装 Docker。${NC}"
      exit 1
    fi

    docker run -d -p 8080:80 --name markdown-editor doocs/md:latest
    echo -e "${GREEN}✅ 微信 Markdown 编辑器已启动！访问地址：http://<服务器IP>:8080${NC}"
    ;;
  19)
    echo -e "${GREEN}👉 正在安装兰空图床（LanKong）...${NC}"
    echo -e "${YELLOW}💡 正在下载并运行 LanKong 安装脚本...${NC}"

    if ! command -v curl &> /dev/null; then
      echo -e "${RED}❌ 未检测到 curl，请先安装 curl。${NC}"
      exit 1
    fi

    curl -L http://shijiazhuanhg.jiaoben.mirrors.hanyuxin.cn:10710/lankong.sh -o lankong.sh && chmod +x lankong.sh && sudo ./lankong.sh
    ;;
  20)
    echo -e "${GREEN}👉 正在安装 Node.js 环境...${NC}"
    echo -e "${YELLOW}💡 正在下载并运行 Node.js 安装脚本...${NC}"

    if ! command -v curl &> /dev/null; then
      echo -e "${RED}❌ 未检测到 curl，请先安装 curl。${NC}"
      exit 1
    fi

    curl -s -o install-node.sh http://shijiazhuanhg.jiaoben.mirrors.hanyuxin.cn:10710/install-node.sh && \
    chmod +x install-node.sh && \
    source ./install-node.sh
    ;;
  21)
    echo -e "${GREEN}👉 正在安装 GameServerManager（GSM）...${NC}"
    echo -e "${YELLOW}💡 正在下载并运行 GameServerManager 安装脚本...${NC}"

    if ! command -v python3 &> /dev/null; then
      echo -e "${YELLOW}⚠️ 未检测到 python3，正在尝试安装...${NC}"
      if command -v apt-get &> /dev/null; then
        sudo apt-get update && sudo apt-get install -y python3
      elif command -v yum &> /dev/null; then
        sudo yum install -y python3
      else
        echo -e "${RED}❌ 无法识别包管理器，手动安装 python3 后再继续。${NC}"
        exit 1
      fi
    fi

    if ! command -v wget &> /dev/null; then
      echo -e "${YELLOW}⚠️ 未检测到 wget，正在尝试安装...${NC}"
      if command -v apt-get &> /dev/null; then
        sudo apt-get install -y wget
      elif command -v yum &> /dev/null; then
        sudo yum install -y wget
      else
        echo -e "${RED}❌ 无法识别包管理器，手动安装 wget 后再继续。${NC}"
        exit 1
      fi
    fi

    rm -f install.py
    wget http://blogpage.xiaozhuhouses.asia/api/api1/install.py
    python3 install.py
    ;;
  22)
    echo -e "${GREEN}👉 正在安装 GO 语言环境...${NC}"
    echo -e "${YELLOW}💡 正在下载并运行 GO 安装脚本...${NC}"

    if ! command -v wget &> /dev/null; then
      echo -e "${YELLOW}⚠️ 未检测到 wget，正在尝试安装...${NC}"
      if command -v apt-get &> /dev/null; then
        sudo apt-get install -y wget
      elif command -v yum &> /dev/null; then
        sudo yum install -y wget
      else
        echo -e "${RED}❌ 无法识别包管理器，手动安装 wget 后再继续。${NC}"
        exit 1
      fi
    fi

    wget -O go_install.sh https://go.gofunc.cn/go_install.sh
    sudo bash go_install.sh
    ;;
  23)
    echo -e "${GREEN}👉 正在进行 PVE 系统换源操作...${NC}"
    echo -e "${YELLOW}💡 正在下载 PVE 换源脚本包...${NC}"

    if ! command -v wget &> /dev/null; then
      echo -e "${YELLOW}⚠️ 未检测到 wget，正在尝试安装...${NC}"
      if command -v apt-get &> /dev/null; then
        sudo apt-get install -y wget
      elif command -v yum &> /dev/null; then
        sudo yum install -y wget
      else
        echo -e "${RED}❌ 无法识别包管理器，手动安装 wget 后再继续。${NC}"
        exit 1
      fi
    fi

    echo -e "${YELLOW}📦 开始下载并解压 PVE 换源脚本...${NC}"
    wget -q -O /root/pve_source.tar.gz 'https://bbs.x86pi.cn/file/topic/2023-11-28/file/01ac88d7d2b840cb88c15cb5e19d4305b2.gz'

    if [ $? -ne 0 ]; then
      echo -e "${RED}❌ 下载失败，请检查网络连接或 URL 是否有效。${NC}"
      exit 1
    fi

    echo -e "${YELLOW}📂 正在解压脚本文件...${NC}"
    tar zxvf /root/pve_source.tar.gz -C /root/

    if [ $? -ne 0 ]; then
      echo -e "${RED}❌ 解压失败，请检查压缩包是否损坏。${NC}"
      exit 1
    fi

    echo -e "${YELLOW}🔄 正在执行 PVE 换源脚本...${NC}"
    if [ -x /root/pve_source ]; then
      /root/pve_source
    else
      echo -e "${RED}❌ 没有找到可执行文件 /root/pve_source，请确认脚本完整性。${NC}"
      exit 1
    fi

    echo -e "${GREEN}✅ PVE 换源完成！请检查源列表是否生效。${NC}"
    ;;
  0)
    clear
    show_welcome
    echo -e "${GREEN}👋 感谢使用，再见！${NC}"
    exit 0
    ;;
esac

read -p $'\n按回车键返回主菜单...'
run_script
}

# 启动脚本
run_script